package com.foxnicweb.app.domain.patent;

import com.github.foxnic.dao.entity.Entity;
import io.swagger.annotations.ApiModel;
import javax.persistence.Table;
import com.github.foxnic.sql.meta.DBTable;
import com.foxnicweb.app.constants.db.PatentTables.PAT_USER_MAPPING;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import javax.persistence.Transient;
import java.util.Map;
import com.github.foxnic.dao.entity.EntityContext;
import com.foxnicweb.app.domain.patent.meta.UserMappingMeta;
import com.github.foxnic.commons.lang.DataParser;
import com.github.foxnic.sql.data.ExprRcd;



/**
 * 与对方系统的账户对照关系
 * <p>与对方系统的账户对照关系 , 数据表 pat_user_mapping 的PO类型</p>
 * @author 李方捷 , leefangjie@qq.com
 * @since 2023-04-19 10:25:35
 * @sign 5F4313C93B6A17A8A7D838E20FF7E106
 * 此文件由工具自动生成，请勿修改。若表结构或配置发生变动，请使用工具重新生成。
*/

@Table(name = "pat_user_mapping")
@ApiModel(description = "与对方系统的账户对照关系 ; 与对方系统的账户对照关系 , 数据表 pat_user_mapping 的PO类型")
public class UserMapping extends Entity {

	private static final long serialVersionUID = 1L;

	public static final DBTable TABLE =PAT_USER_MAPPING.$TABLE;
	
	/**
	 * 主键：主键
	*/
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@ApiModelProperty(required = true,value="主键" , notes = "主键" , example = "87")
	private Long id;
	
	/**
	 * 对方系统账户ID：对方系统账户ID
	*/
	@ApiModelProperty(required = false,value="对方系统账户ID" , notes = "对方系统账户ID" , example = "550626")
	private Long remoteUserId;
	
	/**
	 * 本地账户ID：本地账户ID
	*/
	@ApiModelProperty(required = false,value="本地账户ID" , notes = "本地账户ID" , example = "700348216272486400")
	private String localUserId;
	
	/**
	 * 同步时间：同步时间
	*/
	@ApiModelProperty(required = false,value="同步时间" , notes = "同步时间" , example = "2023-04-17 02:13:47")
	private Date syncTime;
	
	/**
	 * 获得 主键<br>
	 * 主键
	 * @return 主键
	*/
	public Long getId() {
		return id;
	}
	
	/**
	 * 设置 主键
	 * @param id 主键
	 * @return 当前对象
	*/
	public UserMapping setId(Long id) {
		this.id=id;
		return this;
	}
	
	/**
	 * 获得 对方系统账户ID<br>
	 * 对方系统账户ID
	 * @return 对方系统账户ID
	*/
	public Long getRemoteUserId() {
		return remoteUserId;
	}
	
	/**
	 * 设置 对方系统账户ID
	 * @param remoteUserId 对方系统账户ID
	 * @return 当前对象
	*/
	public UserMapping setRemoteUserId(Long remoteUserId) {
		this.remoteUserId=remoteUserId;
		return this;
	}
	
	/**
	 * 获得 本地账户ID<br>
	 * 本地账户ID
	 * @return 本地账户ID
	*/
	public String getLocalUserId() {
		return localUserId;
	}
	
	/**
	 * 设置 本地账户ID
	 * @param localUserId 本地账户ID
	 * @return 当前对象
	*/
	public UserMapping setLocalUserId(String localUserId) {
		this.localUserId=localUserId;
		return this;
	}
	
	/**
	 * 获得 同步时间<br>
	 * 同步时间
	 * @return 同步时间
	*/
	public Date getSyncTime() {
		return syncTime;
	}
	
	/**
	 * 设置 同步时间
	 * @param syncTime 同步时间
	 * @return 当前对象
	*/
	public UserMapping setSyncTime(Date syncTime) {
		this.syncTime=syncTime;
		return this;
	}

	/**
	 * 将自己转换成指定类型的PO
	 * @param poType  PO类型
	 * @return UserMapping , 转换好的 UserMapping 对象
	*/
	@Transient
	public <T extends Entity> T toPO(Class<T> poType) {
		return EntityContext.create(poType, this);
	}

	/**
	 * 将自己转换成任意指定类型
	 * @param pojoType  Pojo类型
	 * @return UserMapping , 转换好的 PoJo 对象
	*/
	@Transient
	public <T> T toPojo(Class<T> pojoType) {
		if(Entity.class.isAssignableFrom(pojoType)) {
			return (T)this.toPO((Class<Entity>)pojoType);
		}
		try {
			T pojo=pojoType.newInstance();
			EntityContext.copyProperties(pojo, this);
			return pojo;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 克隆当前对象
	*/
	@Transient
	public UserMapping clone() {
		return duplicate(true);
	}

	/**
	 * 复制当前对象
	 * @param all 是否复制全部属性，当 false 时，仅复制来自数据表的属性
	*/
	@Transient
	public UserMapping duplicate(boolean all) {
		com.foxnicweb.app.domain.patent.meta.UserMappingMeta.$$proxy$$ inst = new com.foxnicweb.app.domain.patent.meta.UserMappingMeta.$$proxy$$();
		inst.setSyncTime(this.getSyncTime());
		inst.setRemoteUserId(this.getRemoteUserId());
		inst.setId(this.getId());
		inst.setLocalUserId(this.getLocalUserId());
		inst.clearModifies();
		return inst;
	}

	/**
	 * 克隆当前对象
	*/
	@Transient
	public UserMapping clone(boolean deep) {
		return EntityContext.clone(UserMapping.class,this,deep);
	}

	/**
	 * 将 Map 转换成 UserMapping
	 * @param userMappingMap 包含实体信息的 Map 对象
	 * @return UserMapping , 转换好的的 UserMapping 对象
	*/
	@Transient
	public static UserMapping createFrom(Map<String,Object> userMappingMap) {
		if(userMappingMap==null) return null;
		UserMapping po = create();
		EntityContext.copyProperties(po,userMappingMap);
		po.clearModifies();
		return po;
	}

	/**
	 * 将 Pojo 转换成 UserMapping
	 * @param pojo 包含实体信息的 Pojo 对象
	 * @return UserMapping , 转换好的的 UserMapping 对象
	*/
	@Transient
	public static UserMapping createFrom(Object pojo) {
		if(pojo==null) return null;
		UserMapping po = create();
		EntityContext.copyProperties(po,pojo);
		po.clearModifies();
		return po;
	}

	/**
	 * 创建一个 UserMapping，等同于 new
	 * @return UserMapping 对象
	*/
	@Transient
	public static UserMapping create() {
		return new com.foxnicweb.app.domain.patent.meta.UserMappingMeta.$$proxy$$();
	}

	/**
	 * 从 Map 读取
	 * @param map 记录数据
	 * @param cast 是否用 DataParser 进行类型转换
	 * @return  是否读取成功
	*/
	public boolean read(Map<String, Object> map,boolean cast) {
		if(map==null) return false;
		if(cast) {
			this.setSyncTime(DataParser.parse(Date.class, map.get(UserMappingMeta.SYNC_TIME)));
			this.setRemoteUserId(DataParser.parse(Long.class, map.get(UserMappingMeta.REMOTE_USER_ID)));
			this.setId(DataParser.parse(Long.class, map.get(UserMappingMeta.ID)));
			this.setLocalUserId(DataParser.parse(String.class, map.get(UserMappingMeta.LOCAL_USER_ID)));
			// others
			return true;
		} else {
			try {
				this.setSyncTime( (Date)map.get(UserMappingMeta.SYNC_TIME));
				this.setRemoteUserId( (Long)map.get(UserMappingMeta.REMOTE_USER_ID));
				this.setId( (Long)map.get(UserMappingMeta.ID));
				this.setLocalUserId( (String)map.get(UserMappingMeta.LOCAL_USER_ID));
				// others
				return true;
			} catch (Exception e) {
				return false;
			}
		}
	}

	/**
	 * 从 Map 读取
	 * @param r 记录数据
	 * @param cast 是否用 DataParser 进行类型转换
	 * @return  是否读取成功
	*/
	public boolean read(ExprRcd r,boolean cast) {
		if(r==null) return false;
		if(cast) {
			this.setSyncTime(DataParser.parse(Date.class, r.getValue(UserMappingMeta.SYNC_TIME)));
			this.setRemoteUserId(DataParser.parse(Long.class, r.getValue(UserMappingMeta.REMOTE_USER_ID)));
			this.setId(DataParser.parse(Long.class, r.getValue(UserMappingMeta.ID)));
			this.setLocalUserId(DataParser.parse(String.class, r.getValue(UserMappingMeta.LOCAL_USER_ID)));
			return true;
		} else {
			try {
				this.setSyncTime( (Date)r.getValue(UserMappingMeta.SYNC_TIME));
				this.setRemoteUserId( (Long)r.getValue(UserMappingMeta.REMOTE_USER_ID));
				this.setId( (Long)r.getValue(UserMappingMeta.ID));
				this.setLocalUserId( (String)r.getValue(UserMappingMeta.LOCAL_USER_ID));
				return true;
			} catch (Exception e) {
				return false;
			}
		}
	}
}